#ifndef __SVPWM_H
#define __SVPWM_H


#include "stdint.h"


/* ====================== 自定义常量 =========================== */

#define		SVPWM_SQRT3_2		0.866f		// 根号3 / 2
#define		SVPWM_SQRT3			1.732f		// 根号3


/* ===================== 自定义结构体 ========================== */

typedef struct
{
    float u_alpha;	// 阿尔法轴目标电压 	(最大值为母线电压 * sqrt(3) / 3)
    float u_beta;	// 贝塔轴目标电压   	(最大值为母线电压 * sqrt(3) / 3)
    float u1;		// 用于扇区判断
    float u2;		// 用于扇区判断
    float u3;		// 用于扇区判断
    float t0;		// 0矢量作用时长
    float t1;		// 1矢量作用时长
    float t2;		// 2矢量作用时长
    float t3;		// 3矢量作用时长
    float t4;		// 4矢量作用时长
    float t5;		// 5矢量作用时长
    float t6;		// 6矢量作用时长
    float t7;		// 7矢量作用时长
    float ts;		// SVPWM周期
    float udc;		// 母线电压
    uint8_t sector;	// 扇区索引
    void (*SetChannelAHighLeaveTime)(float time);	// 一个SVPWM周期内A相绕组高电平时间(中央对齐方式)
    void (*SetChannelBHighLeaveTime)(float time);	// 一个SVPWM周期内B相绕组高电平时间(中央对齐方式)
    void (*SetChannelCHighLeaveTime)(float time);	// 一个SVPWM周期内C相绕组高电平时间(中央对齐方式)
}Svpwm_Struct;
typedef Svpwm_Struct *PSvpwm_Struct;


/* ======================= 对外接口 ============================ */

void SvpwmContorol(PSvpwm_Struct pSvpwm, float u_alpha, float u_beta);
uint8_t GetSVPWMSector(PSvpwm_Struct pSvpwm);



#endif /* __SVPWM_H */






